package com.study.bigdata.spark.core.rdd.operator.action

import org.apache.spark.{SparkConf, SparkContext}

object Spark07_RDD_Oper_Action {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(conf)

    // TODO 算子 - 行动
    val rdd = sc.makeRDD(List(1,2,3,4),2)
    val user = new User
    rdd.foreach(
      num =>{
        println(user.age+num)
      }
    )
    /*
    33
    31
    34
    32
     */
    // Scala语法：闭包
    // Spark在执行算子时，如果算子内部使用了外部的变量（对象），那么一定意味着会出现闭包
    // 在这种场景中，需要将Driver端变量通过网络传递给Executor端执行
    // 可以在真正执行前对数据进行序列化校验

    // Spark在执行任务之前，需要先进行闭包检测
    sc.stop()
  }
  class User extends Serializable {
    val age =30
  }

}
